在遊戲中不免會遇到死亡或掉下陷阱的問題,但身為遊戲製作者,總不能讓玩家死亡後總是從頭開始吧。就像馬力歐冒險的關卡中,一定會在關卡中間放置一面旗幟,即便死亡後也會從那個旗幟位置再開始。
今天的分享就是要來做出這個旗幟的效果,不過在BlueRemedy關卡中並不會有明顯類似旗幟的物件做為紀錄點,而是會在許多地方(例如懸崖邊、機關前等等)設置隱形的觸發器,經過時記下位置。
以下面這張圖為例,這是遊戲中的一個二段跳的教學地形,深谷中有許多尖刺,如果玩家掉下去基本上是很難再跳上來。
為了避免玩家卡關而死亡,我們必須在深谷兩側放置紀錄位置的trigger (以製作左邊的trigger為教學) ,先建立一個空物件"RecordPoint" 並設定BoxCollider2D為trigger
接著我們在trigger物件中心曾一個腳本RecordPointManager.cs
這個腳本中需要做的事情很簡單
於是當主角進入時,這個腳本中的playerRecordPos就會更新為最新的這個紀錄點位置。
然後可以把這個物件做成Prefab,當需要設定紀錄點時只需要從Project視窗中拉出就可以。
完成紀錄點後,接這設定回傳功能!
首先要先想好,怎樣的情況要強制把主角傳回上一個紀錄點? 也許是掉入陷阱被刺了1秒、也許是不小心穿牆掉到地圖外。
不論如何似乎都需要有個區域範圍,用來判斷是否玩家在需要被傳回的位置。因此第一步要先創一個物件"TransbackTrigger”,並設定好底下的trigger
接著建立TransbackManager腳本元件
最最基本的方式是當主角進入時,將她的位置傳回上一個紀錄點
不過以這個尖刺機關來說,剛被刺到就傳回似乎有些太快了,因此我要在做個計時器,當主角進入刺的區域(被刺) 1秒後再回傳。
將程式碼改成下面這樣,當停留在區域內時,timer計時,如果超過1秒(自訂)就回傳,並且在回傳後或離開區域後重置timer。
效果如下
是不是好很多了呢~ 至於把時間設定的變數設為公開的好處是,我們一樣能將這個這個TransbackTrigger設為Prefab重複使用,在不同位置可能會有不同的偵測時間。
例如很多人玩遊戲就喜歡一直往地圖外跑... 所以我通常會設一個大trigger在地圖下面,一碰到trigger就立刻回傳,這時候時間設定為0。
最後,如果想讓整體效果看起來更舒服,可以在回傳時加上適當的畫面漸暗漸亮效果,但因為和這篇文章內容不相關所以只在下面附上效果影片及程式碼,有興趣的讀者可以自行研究。